/*
 * Copyright 2011 Dominik Pretzsch <dominik.pretzsch at gmail.com>.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package de.blacksheep.jmoteextract.archive.strategy;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import net.sf.sevenzipjbinding.ISevenZipInArchive;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.SevenZipException;
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;

/**
 * <code>ArchiveOpenStrategySingleFile</code> provides a strategy to <br>
 * open single-file archives.
 * 
 * @author Dominik Pretzsch <dominik.pretzsch at gmail.com>
 */
public class ArchiveOpenStrategySingleFile implements ArchiveOpenStrategy {
    
    private static String FILE_OPEN_MODE = "r";
    
    private RandomAccessFile f;
    private ISevenZipInArchive inArchive;

    public ISevenZipInArchive open(File file) 
            throws SevenZipException, FileNotFoundException {
        
        f = new RandomAccessFile(file, FILE_OPEN_MODE);        
        inArchive = SevenZip.openInArchive(null, new RandomAccessFileInStream(f));
        
        return inArchive;
    }

    public void close() throws IOException, SevenZipException {
        inArchive.close();
        f.close();
    }
}
